#include <bits/stdc++.h>
using namespace std;
#define ll long long
struct max_min {
    ll a, b;
    bool operator<(const max_min& m) const { return a * b < m.a * m.b; }
};

vector<int> gjd(ll a, ll b) {
    vector<int> aa;
    while (a > 0) {
        aa.push_back(a % 10);
        a /= 10;
    }
    vector<int> bb;
    while (b > 0) {
        bb.push_back(b % 10);
        b /= 10;
    }
    vector<int> cc(aa.size() + bb.size(), 0);
    for (int i = 0; i < bb.size(); i++) {
        int carry = 0;
        for (int j = 0; j < aa.size(); j++) {
            cc.push_back((bb[i] * aa[j]) % 10 + cc[i + j] + carry);
            carry = (bb[i] * aa[j] + cc[i + j]) / 10;
        }
        if (carry != 0) cc.push_back(carry);
    }
    while (cc.size() > 1 && cc.back() == 0) cc.pop_back();
    vector<int> dd;
    for (int i = cc.size() - 1; i >= 0; i--) {
        dd.push_back(cc[i]);
    }
    return dd;
}

int main() {
    int n;
    cin >> n;
    ll ka, kb;
    cin >> ka >> kb;
    vector<max_min> m(n);
    for (int i = 0; i < n; i++) {
        cin >> m[i].a >> m[i].b;
    }
    sort(m.begin(), m.end());
    ll prefix = ka;
    ll max_coin = 0;
    for (int i = 0; i < n; i++) {
        ll coin = prefix / m[i].b;
        max_coin = max(max_coin, coin);
        prefix *= m[i].a;
    }
    cout << max_coin << endl;

    return 0;
}